草庐IT

Java Iterator(迭代器)

全部标签

c++ - 每次循环迭代时清理 vector 。最有效的内存方式是什么?

我有一个关于std::vector的问题。我有一个非常占用内存的算法,我预见到预测vector大小并提前为vector保留足够的内存将帮助我减少内存使用量。以下哪个更好:for(...){std::vectormy_vector;my_vector.reserve(stuff_count);//Dostuff,andappendstufftomy_vector.}或者这个:std::vectormy_vector;for(...){my_vector.clear();my_vector.reserve(stuff_count);//Dostuff,andappendstufftomy_

c++ - pop_back() 是否真的使 std::vector 上的 *all* 迭代器无效?

std::vectorints;//...fillintswithrandomvaluesfor(std::vector::iteratorit=ints.begin();it!=ints.end();){if(*it此代码无效,因为调用pop_back()时,它无效。但我没有找到任何文档讨论std::vector::pop_back()中迭代器的失效。你有相关链接吗? 最佳答案 调用pop_back()删除vector中的最后一个元素,因此该元素的迭代器无效。pop_back()调用不会使最后一个元素之前的项目的迭代器无效,只有重

c++ - 使用迭代器获取 vector 的索引

当迭代vector的元素时,最好使用迭代器而不是索引(参见Whyuseiteratorsinsteadofarrayindices?)。std::vectorvec;std::vector::iteratorit;for(it=vec.begin();it!=vec.end();++it){//dowork}但是,可能需要在循环体中使用索引。考虑到性能和灵active/可扩展性,在这种情况下,以下哪项更可取?回到索引循环std::vectorvec;size_ti;for(i=0;i计算偏移量std::vectorvec;std::vector::iteratorit;for(it=v

c++ - 二维数组 C++ 的列迭代器

我有一个浮点vector,我将其视为二维数组,声明为std::vectorvec(height*width);我正在处理的数值问题需要使用相同的算法在行和列中进行处理,因此我希望能够通过迭代器编写它们,并根据需要输入行迭代器或列迭代器.为了澄清,这里是访问数组的指针算术版本:valueatxy=vec[y*width+x];行迭代器形式当然很简单,假设我有一个函数templatevoidprocess(iterbegin,iterend),调用是process(vec.begin(),vec.end());现在为了能够对列操作使用相同的函数,我需要一个列迭代器。这与通常的vector迭

c++ - 公开 begin() 和 end() 的 const 和非常量版本,以使用智能指针迭代成员 vector

//目录.hclassCat{public:voidconst_meow()const{...};voidmeow(){...};};classCatLibrary{public:std::vector>::iteratorbegin(){returnm_cat_list.begin();}//compileerror,thecompilercomplainscannotcoverttype//from`std::vector>::const_iterator`//to`std::vector>::const_iterator`std::vector>::const_iteratorb

c++ - 如何在多个排序列表上创建迭代器?

好的,这是我得到的一道面试题,当时我的表现很一般。我想知道最佳解决方案是什么以及如何最好地实现。给定多个排序列表,构建东西,使我们能够从最小元素到最大元素遍历所有这些列表。例子:{-2,5,10}{2,9,11}{-5,9}->-5,-2,2,5,9,9,10,11更新:在SO聊天#c-questions-and-answers和特别是@Nican的帮助下,我已经让这艘船以某种方式飞起来了。我已经发布了我的工作代码作为答案,以允许其他解决方案。我在下面发布的答案仍然很乱,特别是我没有正确实现==和!=。我在这些方面仍然需要帮助。这个问题的理由在网上找到简洁的自定义迭代器实现并不常见。我

c++ - 在执行 DFS 时在 Boost::graph 中维护迭代器

Boost:graph库的大多数示例通过调用boost的深度优先搜索实用程序来执行深度优先搜索。创建顶点和边后,在图上调用DFS以深度优先的方式遍历整个图,如果我们有与之关联的访问者方法,它将调用访问者方法来执行操作,遍历每个节点。我正在寻找的是一种在图上维护迭代器的方法,而不是一次遍历图,当客户端调用“next()”时,迭代器将移动到下一个顶点遍历到DFS并再次调用next时,迭代器将移动到DFS指示的下一个顶点。是否有使用boost:graph执行上述操作的示例?谢谢 最佳答案 不幸的是,boost::graphAPI基于访问者

c++ - 为什么 vector::pop_back 会使迭代器 (end() - 1) 无效?

注意:该问题也适用于erase。见底部。end()-1迭代器在vector上调用pop_back后无效的原因是什么?为了澄清,我指的是这种情况:std::vectorv;v.push_back(1);v.push_back(2);std::vector::iteratori1=v.begin(),i2=v.end()-1,i3=v.begin()+1;v.pop_back();//i1isstillvalid//i2isnowinvalid//i3isnowinvalidtoostd::vector::iteratori4=v.end();assert(i2==i4);//undefi

c++ - 为什么 ifstream::read 比使用迭代器快得多?

事实上,有很多方法可以将文件读入字符串。两个常见的是使用ifstream::read直接读取字符串,以及使用steambuf_iterators和std::copy_n:使用ifstream::read:std::ifstreamin{"./filename.txt"};std::stringcontents;in.seekg(0,in.end);contents.resize(in.tellg());in.seekg(0,in.beg);in.read(&contents[0],contents.size());使用std::copy_n:std::ifstreamin{"./fil

c++ - 迭代可变模板类型

我已经坚持了一段时间,但我已经没有想法了,感谢帮助!为了简化,以下部分是示例代码。假设如下:classBase;classDerivedA:publicBase;classDerivedB:publicBase;还有这个:classManager{public:std::mapcontainer;templatevoidremove(){//Iteratethroughtemplatessomehowand...container.erase(typeid(T));}}基本上,我通过使用std::type_index作为键,在容器中存储派生类的唯一实例。允许我做类似的事情:manage